Various mechanisms exist for testing software builds and new software versions. Configuration management systems are often used where a developer, or developer team, may check software modules in and out of the system. When a module or update is checked in, the module gets compiled and linked with other modules and features to build the final product.
As software systems become larger and more complex, and as marketing schemes with incremental level functionality become more popular, it becomes more and more difficult to test various versions of the software build. For instance, in a typical development environment, different teams work concurrently on different aspects of the entire system, including bug fixing and new features or enhancements.